home *** CD-ROM | disk | FTP | other *** search
/ Amiga CD-ROM Collection / Amiga CD-ROM Collection - Auge 4000 and Cactus and Demo Util.iso / auge4000 / 46 / lib / memory / cmpmem.a < prev    next >
Text File  |  1990-06-20  |  1KB  |  67 lines

  1.  
  2.         ;   CMPMEM.A
  3.         ;
  4.         ;   (c)Copyright 1990, Matthew Dillon, All Rights Reserved
  5.  
  6.         section text,code
  7.  
  8.         ;   CMPMEM (s1, s2, len)
  9.         ;   MEMCMP (s1, s2, len)    ANSI
  10.         ;   BCMP   (s1, s2, len)    UNIX
  11.         ;        A0    A1  D0
  12.         ;     4(sp) 8(sp) 12(sp)
  13.  
  14.         xdef    _cmpmem
  15.         xdef    _bcmp
  16.         xdef    _memcmp
  17.  
  18. _memcmp:
  19. _cmpmem:
  20. _bcmp:
  21.         move.l    4(sp),A0
  22.         move.l    8(sp),A1
  23.         move.l    12(sp),D1
  24.  
  25.         move.w    A0,D0        ; not word aligned adress.
  26.         lsr.l    #1,D0
  27.         bcs    xcmbyte
  28.         move.w    A1,D0
  29.         lsr.l    #1,D0
  30.         bcs    xcmbyte
  31.  
  32.         move.l    D1,D0        ; save D1
  33.         lsr.l    #2,D1        ; # of longwords to compare
  34.  
  35. xcmlong     subq.l    #1,D1
  36.         bcs    xcmlbreak
  37. xcmlloop    cmpm.l    (A0)+,(A1)+
  38.         dbne    D1,xcmlloop
  39.         bcs    xcmendp
  40.         bhi    xcmendn
  41.         sub.l    #$10000,D1
  42.         bcc    xcmlloop
  43. xcmlbreak
  44.         move.l    D0,D1        ; get original bytes
  45.         and.l    #3,D1        ; # bytes left to compare
  46.  
  47. xcmbyte     subq.l    #1,D1
  48.         bcs    xcmbbreak
  49. xcmbloop    cmpm.b    (A0)+,(A1)+
  50.         dbne    D1,xcmbloop
  51.         bcs    xcmendp
  52.         bhi    xcmendn
  53.         sub.l    #$10000,D1
  54.         bcc    xcmbloop
  55. xcmbbreak
  56. xcmend0     moveq.l #0,D0
  57.         rts
  58. xcmendp     moveq.l #1,D0
  59.         rts
  60. xcmendn     moveq.l #-1,D0
  61.         rts
  62.  
  63.         END
  64.  
  65.  
  66.  
  67.